<!DOCTYPE html>
<html lang="en">

<head>
  <meta charset="UTF-8">
  <meta http-equiv="X-UA-Compatible" content="IE=edge">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>Document</title>
  <link href="https://cdn.bootcdn.net/ajax/libs/twitter-bootstrap/3.4.0/css/bootstrap.css" rel="stylesheet">
</head>

<body>
  <div id="app" style="max-width: 600px;margin: 20px auto">
     商品名称：
     <input type="text" v-model="item.name">
     商品价格：
     <input type="number" v-model="item.price">
     购买数量
     <input type="number" v-model="item.num">
     <button @click="addCart">新增到购物车</button>
      <table class="table table-bordered table-hover table-condensed">
        <thead>
          <tr>
            <th>商品名称</th>
            <th>商品价格</th>
            <th>购买数量</th>
            <th>小计</th>
            <th>操作</th>
          </tr>
        </thead>
        <tbody>
          <tr v-for="(item,index) in items">
            <td>
              <input @change="itemCheck" v-model="checkedItems" :value="item.id" type="checkbox">
              {{item.name}}
            </td>
            <td>
              ￥{{item.price}}
            </td>
            <td>
              <button class="btn btn-xs" @click="addNum(index)">+</button>
              <span>
                {{item.num}}
              </span>
              <button class="btn btn-xs" @click="reduceNum(index)">-</button>
            </td>
            <td>
              {{ (item.num*item.price).toFixed(2) }}
            </td>
            <td>
              <button @click="delItem(index)" class="btn btn-danger btn-xs">删除</button>
            </td>
          </tr>
          
        </tbody>
        <tfoot>
          <tr>
            <td colspan="5">
              全选
              <input type="checkbox" @change="allChecked" :checked="checkedItems.length === items.length">
              总价格：
              <span>
                ￥{{total}}
              </span>
            </td>
          </tr>
        </tfoot>
      </table>
      {{ checkedItems }}
  </div>
  <script src="./vue.js"></script>
  <script>
    const vm = new Vue({
      el: '#app',
      data: {
        item:{
          // 新增商品
          name:'',
          num: 0,
          price: 0
        },
        items: [
          {
            id: 1,
            name:'商品1',
            num: 2,
            price: 10
          },
          {
            id: 2,
            name:'商品2',
            num: 1,
            price: 15.5
          },
          {
            id: 3,
            name:'商品3',
            num: 1,
            price: 18.8
          },
          {
            id: 4,
            name:'商品4',
            num: 1,
            price: 99.9
          }
        ],
        checkedItems: [1,3], // 选中商品的id
        total: 0 // 总价格
      },
      methods: {
        delItem(index){
          if(confirm('您确认删除吗?')){
            this.items.splice(index,1);
            this.calcTotal();
          }
        },
        addCart () {
          // 新增一条商品
          // 新增商品时需要浅拷贝
          this.items.push({...this.item});
        },
        calcTotal(){
          /*
          计算商品总价格
          思路：所有的已经选中商品 数量*单价
          */ 
          // 去除未选中商品
          let checkedEl = [];
          this.items.forEach(item=>{
            /* 
            判断数组是否包含某个元素
            indexOf
            find
            findIndex
            includes
            */
            if(this.checkedItems.includes(item.id)){
              // 当前商品已经选中
              checkedEl.push(item)
            }

          })
          this.total = 0;
          checkedEl.forEach(item=>{
            this.total += item.price*item.num;
          })
        },
        addNum(index){
          // 增加购买数量
          this.items[index].num++;
          this.calcTotal();
        },
        reduceNum(index){
          // 减少购买数量
          this.items[index].num--;
          if(this.items[index].num  < 1){
            this.items[index].num = 1;
          }
          this.calcTotal();
        },
        itemCheck(){
          // 切换商品选中状态
          this.calcTotal();
        },
        allChecked(e){
          // 点击全选改变单选
          
          console.log(e.target.checked);
          this.checkedItems = [];
          if(e.target.checked){
            // 全选被选中了
            this.items.forEach(item=>{
              this.checkedItems.push(item.id)
            })
          }
          this.calcTotal();
        }
      }
    })

  </script>
</body>

</html>